package com.duke.javaagent.bytebuddy.pluggable;

import net.bytebuddy.agent.builder.AgentBuilder;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.dynamic.DynamicType;
import net.bytebuddy.utility.JavaModule;

/**
 * @author gjy
 * @create 2024-12-10 12:58 PM
 */
public class ByteListener implements AgentBuilder.Listener {
    /**
     * 当某个类将要被加载时 会回调此方法
     * @param typeName
     * @param classLoader
     * @param javaModule
     * @param b
     */
    @Override
    public void onDiscovery(String typeName, ClassLoader classLoader, JavaModule javaModule, boolean b) {
//        System.out.println("gaojy== 当某个类将要被加载时 会回调此方法==onDiscovery 打印typeName： "+ typeName);
    }

    /**
     * 对某个类完成了 Transformer  会回调此方法
     * @param typeDescription
     * @param classLoader
     * @param javaModule
     * @param b
     * @param dynamicType
     */
    @Override
    public void onTransformation(TypeDescription typeDescription, ClassLoader classLoader, JavaModule javaModule, boolean b, DynamicType dynamicType) {
        String actualName = typeDescription.getActualName();
//        System.out.println("gaojy===对某个类完成了 Transformer  会回调此方法 === onTransformation 打印typeName： "+ actualName );
    }

    /**
     * 当某个类将要被加载， 并且该类配置了忽略  会回调此方法
     * @param typeDescription
     * @param classLoader
     * @param javaModule
     * @param b
     */
    @Override
    public void onIgnored(TypeDescription typeDescription, ClassLoader classLoader, JavaModule javaModule, boolean b) {
        String actualName = typeDescription.getActualName();
//        System.out.println("gajy===当某个类将要被加载， 并且该类配置了忽略  会回调此方法 ===  onIgnored 打印typeName： "+ actualName );
    }

    /**
     * 当bytebuddy 在 Transformer 过程中发生异常 会回调此方法
     * @param s
     * @param classLoader
     * @param javaModule
     * @param b
     * @param throwable
     */
    @Override
    public void onError(String s, ClassLoader classLoader, JavaModule javaModule, boolean b, Throwable throwable) {
        System.out.println("gaojy=== 当bytebuddy 在 Transformer 过程中发生异常 会回调此方法===  onError 打印typeName： "+ s  + "  异常信息： " + throwable);
    }

    /**
     * 某个类处理完（被 Transformer 、Ignored、onError）时 会回调此方法
     * @param s
     * @param classLoader
     * @param javaModule
     * @param b
     */
    @Override
    public void onComplete(String s, ClassLoader classLoader, JavaModule javaModule, boolean b) {
//        System.out.println("gaojy === 某个类处理完（被 Transformer 、Ignored、onError）时 会回调此方法===    onComplete 打印typeName： "+ s );
    }
}
